<?php


namespace app\home\controller;


use app\home\model\User;
use app\home\validate\LoginPro;
use Symfony\Component\VarDumper\Dumper\DataDumperInterface;
use think\App;
use think\cache\driver\Redis;
use think\db\exception\DbException;
use think\exception\ValidateException;
use think\facade\Db;
use think\facade\View;
use think\facade\Filesystem;
use think\Request;
use liliuwei\think\Jump;
class Login
{
    use Jump;

    //登录页面
    public function login()
    {
        View::config(['layout_on' => false]);
        return View::fetch();
    }

    //注册页面
    public function register()
    {
        View::config(['layout_on' => false]);
        return View::fetch();
    }

    //退出登录
    public function loginOut(){
        session('account',null);
        return redirect('home');
    }

    //验证码生成
    public function code()
    {
        $mobile = \request()->get('mobile', '', 'htmlspecialchars');
        //中间件验证后
        return \app\home\bussiness\Login::code($mobile);
        //发送到手机

//        $statusStr = array(
//            "0" => "短信发送成功",
//            "-1" => "参数不全",
//            "-2" => "服务器空间不支持,请确认支持curl或者fsocket，联系您的空间商解决或者更换空间！",
//            "30" => "密码错误",
//            "40" => "账号不存在",
//            "41" => "余额不足",
//            "42" => "帐户已过期",
//            "43" => "IP地址限制",
//            "50" => "内容含有敏感词"
//        );
//        $smsapi = "http://api.smsbao.com/";
//        $user = "***"; //短信平台帐号
//        $pass = md5("****"); //短信平台密码
//        $content = "短信内容";//要发送的短信内容
//        $phone = "*****";//要发送短信的手机号码
//        $sendurl = $smsapi . "sms?u=" . $user . "&p=" . $pass . "&m=" . $phone . "&c=" . urlencode($content);
//        $result = file_get_contents($sendurl);
//        echo $statusStr[$result];


    }

    //验证登录信息
    public function loginPro(Request $request)
    {

        try {
            $data = $request->all('','trim');
            validate(LoginPro::class)->check($data);
           // dd($data);
           // 验证登录信息的逻辑：用户名、手机号、邮箱输入正确任何一个即可以登录
            $res=User::where(function ($query) use($data) {
                $query->where('username', $data['account'])
                      ->whereOr('phone', $data['account'])
                      ->whereOr('email', $data['account']);
            })->find();
            if($res){
                if($res['password']==md5($data['password'])){
                    if(preg_match('/^1[35789]\d{9}$/',$data['account'])){
                        session('account',substr_replace($data['account'],'****',3,4));
                    }else{
                        session('account',$data['account']);
                    }

                    return successes('登录成功');
                }else{
                    return fail('密码错误');
                }
            }else{
                return fail('账号不存在');
            }

        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            return fail($e->getMessage());
        }



}


    //用户注册添加
    public function userAdd(Request $request){
        try {

            $data=$request->all('','trim');
            unset($data['ml']);
            unset($data['repassword']);
            //添加
            return \app\home\bussiness\Login::userAdd($data);
        }catch (DbException $e){
            $this->error($e->getMessage());
        }

    }


    //图片处理
    public function pic(Request $request){

        $file=$request->file('pic');
        $option=$request->get('option');//1是文字水印，2是图片水印
        //验证参数
        $extension=$file->extension();//获取后缀
        //进行添加
               if($option==1){
            return \app\home\bussiness\Login::pic_font($file,$extension);
        }
        if($option==2){
            return \app\home\bussiness\Login::pic_pic($file,$extension);
        }
        $this->error('请选择水印方式');
    }

    //上传七牛
    public function qiniu(Request $request){
        if($request->isPost()){
            //获取本地缩略图的路径
            $file=$request->file('pic');
            $extension=$file->extension();//获取后缀

            $savename= \think\Image::open($file)->thumb(150,150,\think\Image::THUMB_CENTER)->save('storage/front/user/img/pic_small/'.time().'.'.$extension);
            //获取缩略图图片的文件

            //dd($obj);
            $path = Filesystem::disk('qiniu')->putFile(date('Y-m-d'),$file,'uniqid');
            $path='http://r5t03x6ou.hn-bkt.clouddn.com/'.$path;
            dd($path);

        }else{
            View::config(['layout_on'=>false]);
            return View::fetch();
        }
    }


/**
 * 测试功能回收站
 * 操作login表测试
 */

    //回收站
public function trash(){
    $id=\request()->get('id');
    if(!is_numeric($id)){
        $this->error('参数格式错误');
    }
    $res=\app\home\model\Login::onlyTrashed()->select();//onlytrashed必须模型引用软删除才能找到
    return successes('查找成功',$res);
}


    //恢复
    public function restore(){
        $id=\request()->get('id');
        if(!is_numeric($id)){
            $this->error('参数格式错误');
        }
        $res=\app\home\model\Login::onlyTrashed()->where('id',$id)->update(['delete_time'=>null]);
        if($res){
            return successes('恢复成功');
        }
    }


    //删除
    public function del(){
        $id=\request()->get('id');
        if(!is_numeric($id)){
            $this->error('参数格式错误');
        }
        $data=\app\home\model\Login::where('delete_time','=',null)->find($id);
        if(!$data){
            return fail('不存在或已被删除');
        }
        $res=Db::table('login')->where('id', $id)
            ->useSoftDelete('delete_time',time())
            ->delete();;
        if($res){
            return successes('删除成功');
        }
    }

    /**
     * 第三方登录，登录的域名一定要与回调函数的域名一样，因为session存在那个域名了
     * @return \think\response\Redirect
     */
    public function qqcallback(){
        //dd(1);
        require_once("./plugins/qq/API/qqConnectAPI.php");
        $qc = new \QC();
        //获取access——token
        $access_token=$qc->qq_callback();
        //获取用户信息
        $openid=$qc->get_openid();
        $qc=new \QC($access_token,$openid);
        $user_info=$qc->get_user_info();
        //添加入库,并保存session
        $data=[
            'nickname'=>$user_info['nickname'],
            'figure'=>$user_info['figureurl'],
            'open_type'=>'qq',
            'openid'=>$openid,
        ];
        $res=\app\home\bussiness\Login::add($data);
        if($res){
            //

            return redirect('../home');//www.job.com/home/home两种方式，这种方式没session
        }
        $this->error('登陆失败');

    }
}